Assign a GtkConstraintSolver to each GtkRoot
authorEmmanuele Bassi <ebassi@gnome.org>
Tue, 9 Apr 2019 13:20:54 +0000 (14:20 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 30 Jun 2019 22:42:44 +0000 (23:42 +0100)
Constraints need to work across different parents, so it's better to
have a single constraint solver per top level.

gtk/gtkroot.c
gtk/gtkrootprivate.h

index 919aa65f942e6ae2ee0ebe34fadc1b0209683cde..dce284a57f81cfd6c841dc921f6992c375305b61 100644 (file)
@@ -50,10 +50,18 @@ gtk_root_default_get_display (GtkRoot *self)
   return gdk_display_get_default ();
 }
 
+
+static GtkConstraintSolver *
+gtk_root_default_get_constraint_solver (GtkRoot *self)
+{
+  return NULL;
+}
+
 static void
 gtk_root_default_init (GtkRootInterface *iface)
 {
   iface->get_display = gtk_root_default_get_display;
+  iface->get_constraint_solver = gtk_root_default_get_constraint_solver;
 
   g_object_interface_install_property (iface,
       g_param_spec_object ("focus-widget",
@@ -82,6 +90,17 @@ gtk_root_get_display (GtkRoot *self)
   return iface->get_display (self);
 }
 
+GtkConstraintSolver *
+gtk_root_get_constraint_solver (GtkRoot *self)
+{
+  GtkRootInterface *iface;
+
+  g_return_val_if_fail (GTK_IS_ROOT (self), NULL);
+
+  iface = GTK_ROOT_GET_IFACE (self);
+  return iface->get_constraint_solver (self);
+}
+
 /**
  * gtk_root_set_focus:
  * @self: a #GtkRoot
index 37e8149f33896063b2a32d03feb5c0ab8d479d3f..aae7a674a58f7689dd8ccbf7e75d7d6480dba4b3 100644 (file)
@@ -3,6 +3,8 @@
 
 #include "gtkroot.h"
 
+#include "gtkconstraintsolverprivate.h"
+
 G_BEGIN_DECLS
 
 /**
@@ -17,8 +19,12 @@ struct _GtkRootInterface
 
   /*< public >*/
   GdkDisplay * (* get_display)  (GtkRoot *self);
+
+  GtkConstraintSolver * (* get_constraint_solver) (GtkRoot *self);
 };
 
+GtkConstraintSolver *   gtk_root_get_constraint_solver  (GtkRoot *self);
+
 enum {
   GTK_ROOT_PROP_FOCUS_WIDGET,
   GTK_ROOT_NUM_PROPERTIES